/* 调试记录
 * 
 * 电流的采样, 如果不做一阶滤波的话, 会非常多的尖刺, 做了一阶滤波之后, 空载下的电流采集都为0
 * 修改
 * 
*/


#ifndef _FOC_CURRENT_H
#define _FOC_CURRENT_H

#include <stdint.h>
#include <stdbool.h>
#include "foc_type.h"


#define CALIBRATION_TIMES       1000U                   /*AD校准时采集次数*/

/*电流状态*/
typedef enum{
    START_CALIB = 0,        /*启动校准*/
    CAP_CAHGE,              /*电容充电*/
    CALIBING,               /*校准中*/
}FOC_CUR_STATE_t;


/*电流结构体*/
typedef struct 
{
    /*********************采集相关******************************/
    const float over;                           /*过流值*/
    
    /*********************校准相关************************/
    int32_t _A_ad_offset;                       /*电流AD偏置 ad采集值*/
    int32_t _B_ad_offset;   
    int32_t _C_ad_offset;   

    uint32_t calibration_count;                 /*校准次数*/
    uint32_t charge_cap_ticks;                  /*当前已充电tick*/
    uint32_t cur_over_count;                    /*过流计时*/
    

    /*MCU端口的AD值*/
    uint32_t mcu_ad_A;                          /*直接采样得到的AD值*/ 
    uint32_t mcu_ad_B;   
    uint32_t mcu_ad_C;
    
    abc_t I_abc;                                /*采集转化的三相电流值*/
    qd_t I_qd;                                  /*采样转化qd轴电流值*/

    FOC_CUR_STATE_t state;                      /*状态*/


}FOC_CURRENT_t;


bool FOC_Current_Over(FOC_CURRENT_t *FOC_CURRENT, qd_t I_qd);

int FOC_Current_Calib(FOC_CURRENT_t *foc_current);











#endif
